// components/confirm-popup/index.js
const cabinetService = require('../../../../services/cabinet/cabinet'); // 根据实际路径调整
const { backendApiUrl } = require('../../../../utils/config');
import { getUserToken } from '../../../../model/user'; // 假设用于获取全局用户数据

Component({
  /**
   * 组件的属性列表
   */
  properties: {
    /**
     * 控制弹窗的显示与隐藏
     */
    visible: {
      type: Boolean,
      value: false,
      observer(newVal, oldVal) {
        console.log('visible changed:', newVal, oldVal);
      }
    },
    /**
     * 当前要确认收货的申请ID
     */
    applicationId: {
      type: Number,
      value: null
    }
  },

  /**
   * 组件的初始数据
   */
  data: {
    imageList: [],    // 照片数组，最多5张
    mainPreview: '',  // 大图预览的图片URL
  },

  /**
   * 组件的方法列表
   */
  methods: {
    /**
     * 点击半透明遮罩层
     * 根据需求决定是否关闭弹窗
     */
    onOverlayTap() {
      this.onCancel();
    },

    /**
     * 拍照/选图
     */
    onChooseImage() {
      const remaining = 5 - this.data.imageList.length;
      if (remaining <= 0) {
        wx.showToast({
          title: '已达到上传上限',
          icon: 'none'
        });
        return;
      }

      wx.chooseImage({
        count: remaining, // 根据已上传的数量限制剩余可上传数量
        sizeType: ['original', 'compressed'],
        sourceType: ['camera'], // 仅使用相机
        success: (res) => {
          const tempFilePaths = res.tempFilePaths;
      
          if (tempFilePaths.length > 0) {
            console.log('选择的图片路径:', tempFilePaths);
      
            let newImageList = this.data.imageList.concat(tempFilePaths);
            if (newImageList.length > 5) {
              newImageList = newImageList.slice(0, 5);
              wx.showToast({
                title: '最多可上传5张照片',
                icon: 'none',
              });
            }
      
            this.setData({
              imageList: newImageList,
              mainPreview: newImageList[newImageList.length - 1], // 默认将最后一张作为大图预览
            });
      
            // 遍历每张图片进行直接上传
            tempFilePaths.forEach((filePath, index) => {
              console.log(`开始上传第 ${index + 1} 张图片，路径: ${filePath}`);
      
              // 上传图片
              wx.uploadFile({
                url: `${backendApiUrl}/application/me/updateProof`, // 替换为实际的上传地址
                filePath,
                name: 'proofImages',
                header: {
                  Authorization: `Bearer ${getUserToken()}`, // 确保用户登录并获取 Token
                },
                formData: {
                  id: '123', // 替换为实际的申请 ID
                },
                success: (uploadRes) => {
                  console.log(`第 ${index + 1} 张图片上传成功，响应:`, uploadRes);
      
                  wx.showToast({
                    title: `第 ${index + 1} 张图片上传成功`,
                    icon: 'success',
                  });
                },
                fail: (uploadErr) => {
                  console.error(`第 ${index + 1} 张图片上传失败:`, uploadErr);
                  wx.showToast({
                    title: `第 ${index + 1} 张图片上传失败`,
                    icon: 'none',
                  });
                },
              });
            });
          }
        },
        fail(err) {
          console.error('chooseImage fail:', err);
          wx.showToast({
            title: '拍照失败，请重试',
            icon: 'none',
          });
        },
      });
    },

    /**
     * 点击缩略图，切换到大图预览
     */
    onPreviewImage(e) {
      const index = e.currentTarget.dataset.index;
      const url = this.data.imageList[index];
      this.setData({
        mainPreview: url
      });
    },

    /**
     * 取消按钮
     */
    onCancel() {
      this.setData({
        imageList: [],
        mainPreview: ''
      });
      // 触发自定义事件，通知父页面关闭弹窗
      this.triggerEvent('onCancel');
    },

    deleteImage(e) {
      const index = e.currentTarget.dataset.index
      const imageList = this.data.imageList
      imageList.splice(index, 1)
      this.setData({
        imageList: imageList,
        mainPreview: imageList.length > 0 ? imageList[0] : ''
      })
    },
    
    /**
     * 确定按钮
     */
    onConfirm() {
      const { applicationId, imageList } = this.data;

      if (!applicationId) {
        wx.showToast({ title: '申请ID缺失', icon: 'none' });
        return;
      }

      if (imageList.length === 0) {
        wx.showToast({ title: '请先拍照上传凭证', icon: 'none' });
        return;
      }

      // 调用服务层的 confirmReceipt 方法
      cabinetService.confirmReceipt(applicationId, imageList)
        .then(res => {
          wx.showToast({
            title: res.message || '确认收货成功',
            icon: 'success'
          });
          // 触发自定义事件，通知父页面刷新数据
          this.triggerEvent('onConfirm');
          // 重置组件数据
          this.setData({
            imageList: [],
            mainPreview: ''
          });
        })
        .catch(err => {
          console.error(err);
          wx.showToast({
            title: err.message || '确认收货失败，请稍后重试',
            icon: 'none'
          });
        });
    }
  }
});
